package Colletion_Study.List_01;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

public class CollectionDemo1 {
    /*
        public boolean add(E e)             添加元素
        public void clear()                 清空集合
        public boolean remove(E e)          删除元素
        public boolean contains(Object obj) 判断对象是否在集合内
        public boolean isEmpty()            判断是否为空
        public int size()                   集合长度

        注意点：
            Collection是一个接口，我们不能直接创建他的对象
            所以，现在我们学习他的方法时，只能创建他的实现类对象。
            实现类：ArraysList
     */
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();

        // 1.添加元素
        // 细节1：如果我们要往List系列集合中添加数据
        //      那么方法永远返回true，因为List系列允许重复元素
        // 细节2：如果我们要往set系列集合中添加数据
        //       如果要添加的元素不存在，方法返回true，表示添加成功
        //       如果要添加的元素已经存在，方法返回false，表示添加失败
        //       因为Set系列的集合不允许数据重复
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        System.out.println(coll);

        //2.清空集合
//        coll.clear();
//        System.out.println(coll);

        //3.删除
        //细节1：因为Collection里面定义的是共性方法，所以不能通过索引进行删除，只能通过集合里面的元素进行删除
        //细节2：方法会有一个返回值，删除成功返回true，删除失败返回false
        //如果要删除的元素不存在，就会返回失败
        coll.remove("aaa");
        System.out.println(coll);

        //4.判断元素是否包含
        //细节：底层是依赖equals方法进行判断是否存在的。
        //所以，在集合中存储的是自定义对象，也想通过contains方法来判断是否包含
        //那么在javabean类中，一定要重写equals方法。
        boolean result = coll.contains("aaa");
        System.out.println(result);

        System.out.println("------------------------");
        Collection<Student> stu = new ArrayList<>();
        stu.add(new Student("张三", 18));
        stu.add(new Student("李四", 19));
        //判断集合中某个学生对象是否包含
        Student stu1 = new Student("张三", 18);
        //如果同姓名和同年龄，就认为是同一个学生
        //因为contains方法在底层依赖equals方法判断对象是否一致的
        //如果存的是自定义对象，如果没有重写equals方法，
        // 那么默认使用Object类中equals方法，依赖地址值进行判断
        //需求：如果同姓名和同年龄，就认为是同一个学生。
        //所以，需要在自定义的javabean类中，重写equals方法就可以。
        System.out.println(stu.contains(stu1));

        //5.判断集合是否为空
        boolean empty = coll.isEmpty();
        System.out.println(empty);//false

        //6.获取集合长度
        System.out.println(coll.size());
    }
}

class Student {
    private String name;
    private int age;

    //重写equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}
